UDP理解及UDP的MATLAB实现 Matlab UDP

您所在的位置:网站首页 udp 本地端口 UDP理解及UDP的MATLAB实现 Matlab UDP

UDP理解及UDP的MATLAB实现 Matlab UDP

2024-07-01 02:39| 来源: 网络整理| 查看: 265

UDP理解及UDP的MATLAB实现 一、UDP通信方式理解1、什么是UDP2、TCP和UDP区别3、个人对UDP的理解 二、UDP的MATLAB实现1、单窗口实现2、多窗口实现 补充参考

一、UDP通信方式理解 1、什么是UDP

UDP是User Datagram Protocol的简称,中文名是用户数据报协议,是OSI参考模型中的传输层协议,它是一种无连接的传输层协议,提供面向事务的简单不可靠信息传送服务。

2、TCP和UDP区别 特征点TCPUDP是否连接面向连接面向非连接传输可靠性可靠会丢包,不可靠应用场景传输数据量大传输量小速度慢快

TCP(传输控制协议)提供的是面向连接、可靠的字节流服务。当客户端和服务器彼此交换数据前,必须先在双方之间建立一个TCP连接,之后才能传输数据。TCP提供超时重发,丢弃重复数据,检验数据,流量控制等功能,保证数据能从一端传到另一端。 UDP(用户数据报协议)是一个简单的面向数据报的运输层协议。UDP不提供可靠性,它只是把应用程序传给IP层的数据报发送出去,但是并不能保证它们能到达目的地。由于UDP在传输数据报前不用在客户和服务器之间建立一个连接,且没有超时重发等机制,故而传输速度很快。

3、个人对UDP的理解

UDP类似于串口RS485的Modbus协议,不像TCP是两者固定的连接,而是使用广播的方式进行通信。 在UDP和Modbus中,发送方只负责发出数据,接收方需要判断数据是否是发送给自己的,同时,发送方都可以将数据一次性发送给多个接收方。

二、UDP的MATLAB实现 1、单窗口实现

基于上述对UDP的理解,现在开始使用Matlab完成对UDP的实现,这里完成一个小demo,具体程序如下:

fclose(instrfindall);%先关闭之前可能存在的UDP %127.0.0.1即为本地 u1=udp('127.0.0.1','RemotePort',8847,'LocalPort',8848); %u1的本机端口为8848,即监听所有发到8848端口的消息; %u1的远程端口为8847,即若u1发送消息,则发送到8847端口,本机端口为8847的UDP便会受到u1的消息 u2=udp('127.0.0.1','RemotePort',8848,'LocalPort',8849);%同上 u3=udp('127.0.0.1','RemotePort',8848,'LocalPort',8850);%同上 u1.DatagramReceivedFcn = @instrcallback;%设置u1接收到数据包时,调用回调函数显示 u2.DatagramReceivedFcn = @instrcallback;%设置u2接收到数据包时,调用回调函数显示 u3.DatagramReceivedFcn = @instrcallback;%设置u3接收到数据包时,调用回调函数显示 fopen(u1);%打开udp连接 fopen(u2);%同上 fopen(u3);%同上 %-------------------------尝试让u2、u3发送消息,u1接收消息-------------------- fprintf(u2,'u1 receive data from u2'); %u2发送消息,因为u2的远程端口为8848,故此时u1监听到了这个消息 fscanf(u1)%u1接收到u2发来的消息 fprintf(u3,'u1 receive data from u3');%同上 fscanf(u1)%同上 %--------------------尝试让u1发送消息,u2、u3接收消息------------------------- u1.Remoteport=8849;%更改u1的远程端口为u2的本地端口,这样u2可以收到u1的消息 fprintf(u1,'u2 reveive data from u1');%u1向8849端口发送消息,即u2的本机端口 fscanf(u2)%u2接收到u1发来的消息 u1.Remoteport=8850;%更改u1的远程端口为u3的本地端口,这样u3可以收到u1的消息 fprintf(u1,'u3 reveive data from u1');%u1向8850端口发送消息,即u3的本机端口 fscanf(u3)%u3接收到u1发来的消息 %综上,可以理解为UDP的远程端口为发送消息的端口,本机端口为接收消息的端口 %当u1的远程端口对应u2的本地端口时,u2接收到u1的消息 fclose(u1);%关闭udp1连接 fclose(u2);%同上 fclose(u3); delete(u1);%删除udp1连接,释放内存 delete(u2);%同上 delete(u3); clear u1;%清除工作区中的udp1数据 clear u2;%同上 clear u3;

尝试运行这个Demo的时候,打开一个Matlab,直接在Matlab中创建一个脚本,将这段代码复制进去运行就可以了,运行结果如下: 在这里插入图片描述 在这里插入图片描述 通信成功!

2、多窗口实现

上面的Demo只使用了一个Matlab窗口,我们可以尝试同时打开两个Matlab窗口,使两个Matlab窗口之间进行通信,具体Demo代码如下: 第一个窗口:UDP1.m

fclose(instrfindall);%先关闭之前可能存在的UDP %127.0.0.1即为本地 u1=udp('127.0.0.1','RemotePort',8847,'LocalPort',8848); %u1的本机端口为8848,即监听所有发到8848端口的消息; %u1的远程端口为8847,即若u1发送消息,则发送到8847端口,本机端口为8847的UDP便会受到u1的消息 u2=udp('127.0.0.1','RemotePort',8848,'LocalPort',8849);%同上 u3=udp('127.0.0.1','RemotePort',8848,'LocalPort',8850);%同上 u1.DatagramReceivedFcn = @instrcallback;%设置u1接收到数据包时,调用回调函数显示 fopen(u1);%打开udp连接 %fopen(u2);%这里不需要建立u2和u3的UDP连接 %fopen(u3);% %--------------------u1发送消息------------------------- u1.Remoteport=8849; fprintf(u1,'u2 reveive data from u1');%u1发送消息给u2 u1.Remoteport=8850; fprintf(u1,'u3 reveive data from u1');%u1发送消息给u3 %--------------------u1接收消息------------------------- fscanf(u1) fscanf(u1) fclose(u1);%关闭udp1连接 delete(u1);%删除udp1连接,释放内存 clear u1;%清除工作区中的udp1数据

再另开一个matlab窗口(不是标签页),如图: 在这里插入图片描述 在第二个窗口中,新建脚本,输入程序UDP2.m:

fclose(instrfindall);%先关闭之前可能存在的UDP u2=udp('127.0.0.1','RemotePort',8848,'LocalPort',8849); u3=udp('127.0.0.1','RemotePort',8848,'LocalPort',8850); u2.DatagramReceivedFcn = @instrcallback;%设置u2接收到数据包时,调用回调函数显示 u3.DatagramReceivedFcn = @instrcallback;%设置u3接收到数据包时,调用回调函数显示 fopen(u2);%建立u2、u3连接 fopen(u3); %--------------------u2、u3接收消息------------------------- fscanf(u2) fscanf(u3) %--------------------u2、u3发送消息------------------------- fprintf(u2,'u1 reveive data from u2');%u2发送消息给u1 fprintf(u3,'u1 reveive data from u3');%u3发送消息给u1 fclose(u2);%关闭连接 fclose(u3); delete(u2);%删除连接 delete(u3); clear u2; clear u3;

先运行UDP2,之后切换窗口运行UDP1,运行效果如下:

UDP1运行效果: UDP1运行效果 UDP2运行效果: UDP2运行效果 此时,两个Matlab窗口实现了通过UDP的跨窗口通信。

同样,可以使用网络调试助手之类的工具,这些工具一般也都带有UDP调试功能,可以配合Maltab进行调试来验证我们的想法。.

补充

若udp对象创建时,本地端口缺省,则自动创建本地端口,远程端口必须指定,如下:

u1=udp('127.0.0.1',8845); %此时只有一个端口号,该端口默认是远程端口,对象生成时,自动确定一个本地端口号

在这里插入图片描述 如图为使用上述语句生成的UDP对象,可以看出,该UDP对象的本地端口为系统自动生成。

参考

https://blog.csdn.net/china_jeffery/article/details/78923428 https://blog.csdn.net/qq_18820125/article/details/90384741

版权声明:本文为CSDN博主「china_jeffery」的原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接及本声明。 原文链接:https://blog.csdn.net/china_jeffery/article/details/78923428

版权声明:本文为CSDN博主「怎么不去做机械」的原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接及本声明。 原文链接:https://blog.csdn.net/qq_18820125/article/details/90384741



【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3